<?php


/* 
* 无限递归分类
* @param $data array 二维数组
* @param $pid int 父级id
* @param $level int 层级
* @return array
*/

function MassageGetTree($array, $id = 'id', $pid = 'pid', $key = 'data')
{
    //第一步 构造数据
    $items = array();
    foreach ($array as $value) {
        $items[$value[$id]] = $value;
    }
    //第二部 遍历数据 生成树状结构
    $tree = array();
    foreach ($items as $k => $value) {
        if (isset($items[$value[$pid]])) {
            if (!isset($items[$value[$pid]][$key])) {
                $items[$value[$pid]][$key] = [];
            }
            $items[$value[$pid]][$key][] = &$items[$k];
        }
        // else {
        //     if (!$value[$pid]) {
        //         $tree[] = &$items[$k];
        //     } else {
        //         unset($items[$k]);
        //     }
        // }
    }
    // 当所有项遍历完成后再生成树状结构，防止不完整
    foreach ($items as $item) {
        if ($item[$pid] == 0) {
            $tree[] = $item;
        }
    }
    return $tree;
}
function MassageHaversineDistance($lat1, $lon1, $lat2, $lon2)
{
    if (!$lat1 || !$lon1 || !$lat2 || !$lon2) {
        return 0;
    }
    // 将经纬度转换为弧度
    $lat1 = deg2rad($lat1);
    $lon1 = deg2rad($lon1);
    $lat2 = deg2rad($lat2);
    $lon2 = deg2rad($lon2);

    // 计算经纬度差值
    $latDiff = $lat2 - $lat1;
    $lonDiff = $lon2 - $lon1;

    // 应用哈文斯坦公式
    $a = sin($latDiff / 2) ** 2 + cos($lat1) * cos($lat2) * sin($lonDiff / 2) ** 2;
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));

    // 地球半径（单位：千米）
    $earthRadius = 6371.0;

    // 计算距离
    $distance = $earthRadius * $c;
    return $distance;
}
function MassageGetAppointmentTime($datetime)
{
    $startDay = strtotime(date('Y-m-d') . ' 00:00:00');
    $endDay = strtotime(date('Y-m-d') . ' 23:59:59');
    $time = strtotime($datetime);
    # 如果是今日，则返回：今 12：00
    if ($startDay < $time && $time < $endDay) {
        return '今 ' . date('H:i', $time);
    }
    # 获取本周日的时间戳
    $sunday = strtotime('this week Sunday 23:59:59', $startDay);
    # 如果是本周，则返回：周一 12：00
    if ($sunday > $time) {
        return getWeekText(date('w', $time)) . ' ' . date('H:i', $time);
    }
    /* # 获取本月最后一天的时间戳
    $lastDay = strtotime(date('Y-m-01', $startDay) . ' +1 month -1 day 23:59:59');
    # 如果是本月，则返回：01日 12：00
    if ($lastDay > $time) {
        return date('d日 H:i', $time);
    } */
    # 如果是今年，则返回：01-01 12：00
    if (date('Y', $startDay) == date('Y', $time)) {
        return date('m月d日 H:i', $time);
    }
    return $datetime;
}
function getWeekText($w)
{
    $week = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
    return isset($week[$w]) ? $week[$w] : '';
}
function MassageGetTimeText($t)
{
    $text = '';
    $h = 0;
    $hText = '';
    if ($t > 3600) {
        $h = floor($t / 3600);
        $hText = $h . '小时';
        $t = $t % 3600;
    }
    $m = floor($t / 60);
    $s = ceil($t % 60);
    $text = $hText . $m . '分' . $s . '秒';
    return $text;
}
function MassageReplaceIndustryPersonnelName($appid,$str){
    if(!$str||!$appid){
        return $str;
    }
    if(strpos($str,'技师')===false){
        return $str;
    }
    if(!defined('INDUSTRY_PERSONNEL_NAME')){
        $industry_personnel_name = getHpConfig('industry_personnel_name', $appid, 'system');
        if(!$industry_personnel_name){
            $industry_personnel_name = '技师';
        }
        define('INDUSTRY_PERSONNEL_NAME',$industry_personnel_name);
    }
    return str_replace('技师',INDUSTRY_PERSONNEL_NAME,$str);
}